package org.uc3m.ed.tad.lista;

/**
 * Iterador para una lista de elementos. El iterador permite recorrer la lista
 * en ambos sentidos.
 * 
 * @author DEI - ED
 * @version 1.0
 */
public interface IListaIterador<E> 
{
	
	/**
	 * Constantes que definen el recorrido del iterador.
	 * 
	 * <ul>
	 * <li> Orden directo. Del principio al final del lista.
	 * <li> Orden inverso. Del final al princio de la lista.
	 * </ul>
	 */
	public static enum Recorrido 
	{
		directo,inverso;
	};	

	/**
	 * Hay un elemento anterior a la posicion actual del iterador.
	 * 
	 * @return <code> true </code> Existe un elemento anterior.
	 *         <code> false </code> En caso contrario.
	 */
	public boolean hayAnterior();

	/**
	 * Hay un elemento posterior a la posicion actual del iterador.
	 * 
	 * @return <code> true </code> Existe un elemento posterior.
	 *         <code> false </code> En caso contrario.
	 */
	public boolean haySiguiente();

	/**
	 * Retrocede una posicion el iterador.
	 * 
	 * @return El elemento anterior a la posicion actual del iterador.
	 * @throws NoSuchElementException
	 *             El iterador no tiene elemento anterior.
	 */
	public E anterior();

	/**
	 * Avanza una posicion el iterador.
	 * 
	 * @return El elemento posterior a la posicion actual del iterador.
	 * @throws NoSuchElementException
	 *             El iterador no tiene elemento posterior.
	 */
	public E siguiente();

}
